# 你构建了一个自定义容器对象，里面包含有列表、元组或其他可迭代对象。你想直接在你的这个新容器对象上执行迭代操作。

# 实际上你只需要定义一个iter () 方法，将迭代操作代理到容器内部的对象上去。

# Python 的迭代器协议需要iter () 方法返回一个实现了next () 方法的迭代
# 器对象。如果你只是迭代遍历其他容器的内容，你无须担心底层是怎样实现的。你所
# 要做的只是传递迭代请求既可。


class Node:
    def __init__(self, value):
        self._value = value
        self._children = []

    def __repr__(self):
        return 'Node({!r})'.format(self._value)

    def add_child(self, node):
        self._children.append(node)

    def __iter__(self):
        return iter(self._children)


if __name__ == '__main__':
    root = Node(0)
    child1 = Node(1)
    child2 = Node(2)
    root.add_child(child1)
    root.add_child(child2)

    for ch in root:
        print(ch)
